package com.aaa.arouterone.test

import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import javax.inject.Qualifier

/**
 * @Description:
 * @Author:  lfc
 * @Email:    iamlifuchang@163.com
 * @CreateTime:     2021/3/30 10:19
 * @UpdateRemark:
 */
@Module
@InstallIn(ActivityComponent::class)
abstract class EngineModule {

    //Qualifier注解的作用就是专门用于解决我们目前碰到的问题，给相同类型的类或接口注入不同的实例。
    @Qualifier
//    选择AnnotationRetention.BINARY表示该注解在编译之后会得到保留
    @Retention(AnnotationRetention.BINARY)
    annotation class BindGasEngine

    @Qualifier
    @Retention(AnnotationRetention.BINARY)
    annotation class BindElectricEngine


    @BindGasEngine
    //    在抽象函数上方加上@Bind注解，这样Hilt才能识别它。
    @Binds
    abstract fun bindEngine(gasEngine: GasEngine): Engine


    @BindElectricEngine
    @Binds
    abstract fun bindElectricEngine(electricEngine: ElectricEngine): Engine
}